<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>


<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>PG 102 -- Projet de programmation impérative</title>
</head><body>

<h1>Projet de programmation impérative (PG102)</h1>

<p>
La société Pirestonlin a un besoin urgent d'un programme de simulation
d'arrosage automatique de son parc d'arbres par des robots, afin de mettre
en place rapidement une solution d'arrosage dans son usine qui a été le
théâtre récent d'un grave incident&nbsp;:
</p>

<div align="center">
<table summary="Article de presse" width="70%">
<tbody><tr><td>
<small>
<b>Extrait d'un article paru dans la presse --</b> Hier soir vers 18h,
l'entrée de l'usine de production de pneumatiques bio Pirestonlin était
bloquée par une manifestation de ses employés qui protestaient contre la
mort par dessèchement d'un des arbres du jardin qui jouxte l'usine.
Vers 18h12, juste avant l'intervention des forces héliportées de la
police, ceux-ci menaçaient d'éteindre les lumières de l'usine pour
compenser le bilan écologique de la mort de cet arbre.
</small>
</td></tr>
</tbody></table>
</div>

<p>
Vous êtes chargés de réaliser un programme qui simulera un parc contenant
des arbres et un ou plusieurs robot(s). Le programme devra animer les robots
pour qu'ils passent au pied de chaque arbre en essayant de minimiser un
peu le chemin parcouru par chaque robot. S'agissant de robots bio
(aussi connus sous le nom de robiots), ils puisent leur énergie du soleil
et convertissent l'énergie en eau&nbsp;; les robiots n'ont donc pas besoin
de se réapprovisionner en eau ou en énergie.
</p>

<p>
Le programme que vous réaliserez sera au final compliqué si vous ne parvenez
pas à le découper intelligemment. Nous déclinons des variantes de plus en
plus compliquées qui peuvent constituer des étapes par lesquelles la réalisation
de votre programme passera. Vous devez penser à toutes les évolutions dès
le départ afin que la réalisation de ces évolutions soit aisée et que vous
n'ayez pas à tout réécrire pour chaque variante. Chaque évolution ultérieure
doit inclure les capacités des versions précédentes.
</p>

<h2>Les variantes possibles</h2>

<ol>
<li>Terrain plat, un robiot, sortie de trajectoire GNU Plot</li>
<li>Terrain non plat</li>
<li>Sortie de trajectoire animée, rendue grâce à POVRay, robiots et arbres en
    forme de sphère</li>
<li>Plusieurs robiots (attention aux collisions)</li>
<li>Robiots modélisés par autre chose que des sphères (au choix)</li>
<li>...</li>
</ol>

<p>Notez bien que ces variantes s'appuient sur des briques de base qui doivent
être réutilisables d'une variante à l'autre dans votre programme</p>

<h2>Les spécifications détaillées du programme</h2>

<p>
Voici la page man de votre programme&nbsp;:
</p>

<div align="center">
<table summary="Page de manuel" width="70%">
<tbody><tr><td>
<pre><b>NAME</b>
      <b>arrosage</b> -- simulation de l'arrosage d'arbres par des robiots

<b>SYNOPSIS</b>
      <b>arrosage [-abhp] [-g</b><i>w</i><b>x</b><i>h</i><b>] [-r </b><i>robiots</i><b>] [-s </b><i>vitesse</i><b>,</b><i>...</i><b>] [-t </b><i>arbres</i><b>]</b>

<b>DESCRIPTION</b>

     Le programme <b>arrosage</b> génère un terrain de taille donnée
     aléatoirement, sur lequel il place aléatoirement des arbres et
     des robiots.

     Il calcule ensuite le chemin que chaque robiot va parcourir pour
     que tous les arbres aient été arrosés, et affiche les résultats sous
     différentes formes, par exemple un résumé en texte, un tracé des
     trajectoires au format GNU Plot, et/ou une série de fichiers POV Ray
     permettant d'obtenir un rendu réaliste de la simulation.

     Il accepte les options suivantes&nbsp;:

     <b>-a</b> (animation) génère une description en POVRay de la scène tous
          les 1/25ème de seconde simulée, dans des fichiers de noms
          <i>anim-00001.pov</i>, <i>anim-00002.pov</i>, etc.

     <b>-b</b> (bilan) affiche un bilan sur la sortie standard comprenant le
          temps total mis pour arroser tous les arbres, et la distance totale
          parcourue par les robiots.

     <b>-g</b><i>w</i><b>x</b><i>h</i> (grille) spécifie que la grille représentant le terrain est
          de taille <i>w</i> par <i>h</i> cases de 1 mètre carré.
          Par défaut, 10x10. Maximum&nbsp;: 100x100.

     <b>-h</b> (help) affiche le synopsis du programme

     <b>-p</b> (plot) génère les trajectoires des robiots, la grille, et la position
          des arbres dans des fichiers GNU plot nommés respectivement
          <i>robiots.plot</i>, <i>grille.plot</i>, et <i>arbres.plot</i>.

     <b>-r</b> <i>robiots</i> spécifie le nombre de robiots à gérer, 1 par défaut.
          Maximum&nbsp;: 20.

     <b>-s</b> <i>vitesse</i><b>,</b><i>...</i> spécifie la vitesse en mètres par seconde
          de chaque robiot. Si <b>-r</b> n'est pas spécifiée, le nombre de robiots
          devient le nombre de vitesses spécifiées. La dernière vitesse
          spécifiée est la vitesse de tous les robiots dont la vitesse n'est pas
          spécifiée (dans le cas où <b>-r</b> spécifie un nombre plus grand de
          robiots). La vitesse par défaut est 0.5 mètre par seconde.

     <b>-t</b> <i>arbres</i> spécifie le nombre d'arbres à placer sur la
          grille. Par défaut 3, maximum&nbsp;: 100.

<b>RETURN VALUES</b>
      0 en cas de succès
      1 en cas d'erreur

<b>SEE ALSO</b>
      sechage(1)

<b>BUGS</b>
      A éviter
</pre>
</td></tr>
</tbody></table>
</div>

<h2>Ressources</h2>

Des ressources seront ajoutées dans le futur.

<h2>Liens utiles</h2>

<ul>
<li>Documentation de <a href="http://www.povray.org/documentation/">POV-Ray</a>.</li>
<li>Documentation de <a href="http://www.gnuplot.info/docs/gnuplot.html">GNU Plot</a>.</li>
</ul>

<h2>Critères d'évaluation</h2>

<p>
Le nombre de variantes que vous aurez été capables de réaliser ne sera pas
un indicateur fiable de votre note. Le fait de réaliser plus de variantes
permet principalement de se convaincre que votre logiciel est écrit de manière
extensible. Mieux vaut peu de variantes, mais un logiciel prêt à accueillir
des extensions, que beaucoup de variantes empilées les unes sur les autres
dans un code illisible.
</p>

<div align="center">
<b>Nous lirons le code que vous aurez écrit.</b>
</div>

</body></html>